package org.ala.tiktools.sharddb.mybatis.double_write;

import org.ala.tiktools.sharddb.mybatis.router.IShardRouter;

import java.lang.annotation.*;

/**
 * 双写注解
 * <p>  有该注解的method，在执行事务方法时
 * <p>  如果老路由的数据执行新路由，出现了新的路由结果，那么原老路由的数据会在新路由上重新执行一遍事务操作
 *
 * @author ala
 * @date 2025-02-27 12:13
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
public @interface ShardDoubleWriter {
    /**
     *  新路由
     *  <p> 老路由就是现在method参数上配的路由器
     *  <p> 当新路由返回null或empty时，不再执行双写
     */
    Class<? extends IShardRouter> newRouter();
    /**
     *  双写处理器
     *  <p> 只有第一个会生效，这里写成数组搜为了兼容默认值写法
     */
    Class<? extends IDoubleWriter>[] execute() default {};
}
